﻿using System;
using System.Data;
using System.Data.SqlClient;

namespace CentroVentas.Clases.Funciones
{
	class Producto
	{
		#region Objetos necesarios
		DataBase db = DataBase.GetInstance();
		#endregion

		#region Constructores
			
		public Producto(){}

		public Producto(int Id)
		{
			try
			{
				if (this.existeProducto(Id))
				{
					_id = Id;
				}
				else
				{
					throw new Exception("No existe producto");
				}
			}
			catch (Exception ex)
			{
				throw new Exception(ex.Message);
			}
		}

		public Producto(string codigoBarras)
		{
			try
			{
				if (String.IsNullOrEmpty(codigoBarras))
				{
					throw new Exception("Codigo de barras no valido");
				}
				else
				{
					_id = this.getIdByBarCode(codigoBarras);
				}
			}
			catch (Exception)
			{
				throw new Exception("Producto no valido");
			}
		}

		#endregion

		#region Variables

		private int _id;
		// No se utiliza.
		// private string _marca;
		// private double _precio;

		#endregion

		#region Propiedades

		public int Id 
		{
			get
			{
				return _id;
			}
		}
		
		public string CodigoBarras 
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT codigobarras FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "CodigoBarras");
					return ds.Tables["CodigoBarras"].Rows[0].ItemArray[0].ToString();
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set 
			{
				try
				{
					if (!existeProducto(value))
					{
						db.dadap.UpdateCommand = new SqlCommand("UPDATE productos SET codigobarras = @codigo WHERE id = @id", db.Conn);
						db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
						db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@codigo", SqlDbType.VarChar)).Value = @value;
						db.dadap.UpdateCommand.ExecuteNonQuery();                    
					}
					else
					{
						throw new Exception("Ya existe el código de barras en nuestra BD.");
					}
				}
				catch (Exception ex)
				{                    
					throw new Exception(ex.Message);
				}
			}                      
		}

		public string Descripcion 
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT descripcion FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "descripcion");
					return ds.Tables["descripcion"].Rows[0].ItemArray[0].ToString();
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set 
			{
				try
				{
					db.dadap.UpdateCommand = new SqlCommand("UPDATE productos SET descripcion = @descripcion WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@descripcion", SqlDbType.VarChar)).Value = @value;
					db.dadap.UpdateCommand.ExecuteNonQuery();                                        
				}
				catch (Exception ex)
				{                    
					throw new Exception(ex.Message);
				}
			}
		}

		public string NombreMarca
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT marca.descripcion FROM marca,producto WHERE producto.marca = marca.id AND producto.id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "marca");
					return ds.Tables["marca"].Rows[0].ItemArray[0].ToString();
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}
		}

		public int Marca 
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT marca FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "marca");
					return Convert.ToInt32(ds.Tables["marca"].Rows[0].ItemArray[0].ToString());
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set
			{
				try
				{
					db.dadap.UpdateCommand = new SqlCommand("UPDATE productos SET marca = @marca WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@marca", SqlDbType.VarChar)).Value = @value;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception ex)
				{
					throw new Exception(ex.Message);
				}
			}
		}

		public string Comentarios
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT comentarios FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "comentarios");
					return ds.Tables["comentarios"].Rows[0].ItemArray[0].ToString();
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set
			{
				try
				{
					db.dadap.UpdateCommand = new SqlCommand("UPDATE productos SET comentarios = @comentarios WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@comentarios", SqlDbType.VarChar)).Value = @value;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception ex)
				{
					throw new Exception(ex.Message);
				}
			}
		}

		public int TipoProducto
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT tipoprod FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "tipoprod");
					return Convert.ToInt32(ds.Tables["tipoprod"].Rows[0].ItemArray[0].ToString());
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set
			{
				if (value != 0 || value != 1)
				{
					try
					{
						db.dadap.UpdateCommand = new SqlCommand("UPDATE productos SET tipoprod = @tipoprod WHERE id = @id", db.Conn);
						db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
						db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@tipoprod", SqlDbType.Int)).Value = @value;
						db.dadap.UpdateCommand.ExecuteNonQuery();
					}
					catch (Exception ex)
					{
						throw new Exception(ex.Message);
					}
				}
				else
				{
					throw new Exception("Valor no valido");
				}                
			}
		}

		public int minimo
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT minimo FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "tipoprod");
					return Convert.ToInt32(ds.Tables["tipoprod"].Rows[0].ItemArray[0].ToString());
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set
			{
				if (value != 0 || value != 1)
				{
					try
					{
						db.dadap.UpdateCommand = new SqlCommand("UPDATE productos SET tipoprod = @tipoprod WHERE id = @id", db.Conn);
						db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
						db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@tipoprod", SqlDbType.Int)).Value = @value;
						db.dadap.UpdateCommand.ExecuteNonQuery();
					}
					catch (Exception ex)
					{
						throw new Exception(ex.Message);
					}
				}
				else
				{
					throw new Exception("Valor no valido");
				}
			}
		}

		public DateTime fechaCreado
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT fechaCreado FROM producto WHERE id = @id", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "tipoprod");
					return Convert.ToDateTime(ds.Tables["tipoprod"].Rows[0].ItemArray[0].ToString());
				}
				catch (Exception)
				{
					throw new Exception("Producto no valido");
				}
			}

			set
			{
				try
				{
					db.dadap.UpdateCommand = new SqlCommand("UPDATE fechaCreado SET fechaCreado = @fechaCreado WHERE id = @id", db.Conn);
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.UpdateCommand.Parameters.Add(new SqlParameter("@fechaCreado", SqlDbType.DateTime2)).Value = @value;
					db.dadap.UpdateCommand.ExecuteNonQuery();
				}
				catch (Exception ex)
				{
					throw new Exception(ex.Message);
				}
			}
		}

		public double costoProductoSiguiente
		{
			get
			{
				try 
				{	        
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT precio.costo FROM precio,producto WHERE producto.id = @id AND producto.id = precio.producto AND precio.cactual != 0 ORDER BY precio.fechaCreado ASC", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "precio");
					return Convert.ToDouble(ds.Tables["precio"].Rows[0].ItemArray[0].ToString());
				}
				catch (Exception ex)
				{		
					throw new Exception(ex.Message);
				}
			}
		}

		public int IdUltimaCompra
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT precio.id AS 'Id' FROM precio WHERE precio.producto = @id AND precio.valido = 1 ORDER BY precio.fechaCreado DESC", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "Id");
					if (ds.Tables["Id"].Rows.Count >= 1)
					{
						return Convert.ToInt32(ds.Tables["Id"].Rows[0].ItemArray[0]);
					}
					else
					{
						db.dadap.SelectCommand = new SqlCommand("SELECT precio.id AS 'Id' FROM precio WHERE precio.producto = @id AND precio.valido = 0 ORDER BY precio.fechaCreado DESC", db.Conn);
						db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
						db.dadap.Fill(ds, "Idp");
						return Convert.ToInt32(ds.Tables["Idp"].Rows[0].ItemArray[0]);
					}
				}
				catch (Exception ex)
				{
					throw new Exception(ex.Message);
				}
			}
		}

		public double PrecioUltimaCompra
		{
			get
			{
				try 
				{	        
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT (precio.costo * (precio.utilidad / 100)) AS 'Precio' FROM precio WHERE precio.producto = @id AND precio.valido = 1 ORDER BY precio.fechaCreado DESC", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "precio");
					if(ds.Tables["precio"].Rows.Count >= 1)
					{
						return Convert.ToDouble(ds.Tables["precio"].Rows[0].ItemArray[0]);
					}
					else
					{
						db.dadap.SelectCommand = new SqlCommand("SELECT precio.costo AS 'Precio' FROM precio WHERE precio.producto = @id AND precio.valido = 0 ORDER BY precio.fechaCreado DESC", db.Conn);
						db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
						db.dadap.Fill(ds, "preciou");
						return Convert.ToDouble(ds.Tables["preciou"].Rows[0].ItemArray[0]);
					}
				}
				catch (Exception ex)
				{		
					throw new Exception(ex.Message);
				}
			}
		}

		public int Stock
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT SUM(precio.cactual) AS 'Precio' FROM precio WHERE precio.producto = @id AND precio.valido = 1", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "Stock");
					return Convert.ToInt32(ds.Tables["Stock"].Rows[0].ItemArray[0]);
				}
				catch (Exception)
				{
					return 0;
				}
			}
		}


		#endregion

		#region Metodos y funciones

		public bool existeProducto(string codigo)
		{
			try
			{
				if (String.IsNullOrEmpty(codigo)){
					throw new Exception("Codigo de barras no existe");
				} 
				else
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT COUNT(id) FROM producto WHERE codigobarras = @codbarras", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@cod", SqlDbType.VarChar)).Value = codigo;
					db.dadap.Fill(ds, "Existe");
					if (Convert.ToInt32(ds.Tables["Existe"].Rows[0].ItemArray[0]) == 1) return true;
					return false;
				}                
			}
			catch (Exception)
			{
				throw new Exception("Producto no existe");
			}
		}

		public bool existeProducto(int Id)
		{
			try
			{
				DataSet ds = new DataSet();
				db.dadap.SelectCommand = new SqlCommand("SELECT COUNT(id) FROM producto WHERE id = @id", db.Conn);
				db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = Id;
				db.dadap.Fill(ds, "Existe");
				if (Convert.ToInt32(ds.Tables["Existe"].Rows[0].ItemArray[0]) == 1) return true;
				return false;                
			}
			catch (Exception)
			{
				throw new Exception("Producto no existe");
			}
		}

		private int getIdByBarCode(string codigo)
		{
			try
			{
				DataSet ds = new DataSet();
				db.dadap.SelectCommand = new SqlCommand("SELECT id FROM producto WHERE codigobarras = @codigo",db.Conn);
				db.dadap.SelectCommand.Parameters.Add(new SqlParameter("codigo",SqlDbType.VarChar)).Value = codigo;
				db.dadap.Fill(ds, "CodigoBarras");
				return Convert.ToInt32(ds.Tables["CodigoBarras"].Rows[0].ItemArray[0].ToString());
			}
			catch (Exception ex)
			{
				
				throw new Exception(ex.Message);
			}
		}

		#endregion

		#region Metodos estaticos



		public static double getPrecioVenta(double costo, double utilidad, double iva)
		{
			return Convert.ToDouble(decimal.Round(Convert.ToDecimal((costo * ((utilidad / 100) + 1)) * ((iva / 100) + 1)), 0, MidpointRounding.AwayFromZero));
		}

		public static double getUtilidad(double costo,double precioSugerido){
			return Math.Round(((precioSugerido - (costo + (precioSugerido - (precioSugerido / 1.19)))) / costo) * 100,0,MidpointRounding.ToEven);
		}

		public static int crearProducto(string codbarras,string descripcion,int tipoprod,string marca,string comentarios,int minimo,double costo,int utilidad,int impuesto,double precioventa,int cantidad)
		{
			int idMarca = 0;
			try
			{

				if (Producto.ExisteMarca(marca))				
					idMarca = Producto.GetIdMarca(marca);				
				else
				{
					Producto.AgregarMarca(marca);
					idMarca = Producto.GetIdMarca(marca);
				}

				DateTime fec = DateTime.Now;

				DataBase db = DataBase.GetInstance();
				db.conectar();
				db.dadap.InsertCommand = new SqlCommand("INSERT INTO producto VALUES(@codigo,@descripcion,@tipoprod,@fechacreado,@marca,@comentarios,@minimo)", db.Conn);
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@codigo",SqlDbType.VarChar)).Value = codbarras;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@descripcion",SqlDbType.VarChar)).Value =descripcion;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@tipoprod",SqlDbType.Int)).Value = tipoprod;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@fechacreado",SqlDbType.DateTime2)).Value = fec;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@marca",SqlDbType.VarChar)).Value =idMarca;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@comentarios",SqlDbType.VarChar)).Value =comentarios;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@minimo",SqlDbType.Int)).Value = minimo;
				db.dadap.InsertCommand.ExecuteNonQuery();
				db.desconectar();
				// TODO: ACA SE DEBE MODIFICAR EL VALOR 1 DE LA TABLA PRECIO 
				db.conectar();
				db.dadap.InsertCommand = new SqlCommand("INSERT INTO precio VALUES(@producto,@fecha,@costo,@utilidad,@impuesto,@precio,@cantidad,@stock,0)", db.Conn);
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@producto",SqlDbType.Int)).Value = getUltimoProductoRegistrado();
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@fecha",SqlDbType.DateTime2)).Value = fec;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@costo",SqlDbType.Money)).Value = costo;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@utilidad",SqlDbType.Int)).Value = utilidad;
				// TODO: ELIMINAR CAMPO IMPUESTO.
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@impuesto",SqlDbType.Int)).Value = impuesto;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@precio",SqlDbType.Money)).Value = precioventa;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@cantidad",SqlDbType.Int)).Value = cantidad;
				db.dadap.InsertCommand.Parameters.Add(new SqlParameter("@stock",SqlDbType.Int)).Value = cantidad;
				db.dadap.InsertCommand.ExecuteNonQuery();
				db.desconectar();

				return getUltimoPrecioRegistrado();
			}
			catch (Exception ex)
			{
				
				throw new Exception(ex.Message);
			}
		}

		private static int GetIdMarca(string marca)
		{
			try
			{
				DataSet ds = new DataSet();
				DataBase db = DataBase.GetInstance();

				db.dadap.SelectCommand = new SqlCommand("SELECT id FROM marca WHERE descripcion = @marca", db.Conn);
				db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@marca", SqlDbType.VarChar)).Value = marca;
				db.dadap.Fill(ds, "marca");

				return Convert.ToInt32(ds.Tables["marca"].Rows[0].ItemArray[0]);
			}
			catch (Exception)
			{
				
				throw;
			}
		}

		private static int getUltimoPrecioRegistrado()
		{
			try
			{
				DataBase db = DataBase.GetInstance();
				DataSet ds = new DataSet();
				db.dadap.SelectCommand = new SqlCommand("SELECT precio.id FROM precio ORDER BY id DESC", db.Conn);
				db.dadap.Fill(ds, "UR");
				return Convert.ToInt32(ds.Tables[0].Rows[0].ItemArray[0].ToString());
			}
			catch (Exception ex)
			{
				throw new Exception(ex.Message);
			}
		}

		private static int getUltimoProductoRegistrado()
		{
			try
			{
				DataBase db = DataBase.GetInstance();
				DataSet ds = new DataSet();
				db.dadap.SelectCommand = new SqlCommand("SELECT producto.id FROM producto ORDER BY id DESC", db.Conn);
				db.dadap.Fill(ds, "UR");
				return Convert.ToInt32(ds.Tables[0].Rows[0].ItemArray[0].ToString());
			}
			catch (Exception ex)
			{                
				throw new Exception(ex.Message);
			}
		}

		public static DataSet getListadoProducto(string valor) 
		{
			try
			{
				DataBase db = DataBase.GetInstance();
				DataSet ds = new DataSet();
				CrearTablaSelProducto(ds);
				db.dadap.SelectCommand = new SqlCommand("SELECT producto.id AS 'IdProducto', producto.codigobarras AS 'Codigo', producto.descripcion AS 'Descripcion' FROM producto WHERE (producto.descripcion LIKE '%" + valor + "%' or producto.codigobarras LIKE '%" + valor + "%' or producto.marca LIKE '%" + valor + "%')",db.Conn);
				db.dadap.Fill(ds, "PROD");

				foreach (DataRow dr in ds.Tables["PROD"].Rows)
				{
					DataRow drc = ds.Tables["Productos"].NewRow();
					Producto pr = new Producto(Convert.ToInt32(dr["IdProducto"]));
					drc["IdPrecio"] = pr.IdUltimaCompra;
					drc["IdProducto"] = dr["IdProducto"];
					drc["Codigo"] = dr["Codigo"];
					drc["Descripcion"] = dr["Descripcion"];
					drc["Precio"] = Clases.Currency.formatearMoneda(pr.PrecioVenta);
					drc["Cantidad"] = pr.Stock;
					ds.Tables["Productos"].Rows.Add(drc);
				}			 
				return ds;
			}
			catch (Exception ex)
			{				
				throw new Exception(ex.Message);
			}			
		}

		private static void CrearTablaSelProducto(DataSet ds)
		{
			ds.Tables.Add("Productos");
			ds.Tables["Productos"].Columns.Add("IdPrecio");
			ds.Tables["Productos"].Columns.Add("IdProducto");
			ds.Tables["Productos"].Columns.Add("Codigo");
			ds.Tables["Productos"].Columns.Add("Descripcion");
			ds.Tables["Productos"].Columns.Add("Precio");
			ds.Tables["Productos"].Columns.Add("Cantidad");
	   }

		public double PrecioVenta
		{
			get
			{
				try
				{
					DataSet ds = new DataSet();
					db.dadap.SelectCommand = new SqlCommand("SELECT precioventa AS 'Precio' FROM precio WHERE precio.producto = @id AND precio.valido = 1 ORDER BY precio.fechaCreado DESC", db.Conn);
					db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
					db.dadap.Fill(ds, "precio");
					if (ds.Tables["precio"].Rows.Count >= 1)
					{
						return Convert.ToDouble(ds.Tables["precio"].Rows[0].ItemArray[0]);
					}
					else
					{
						db.dadap.SelectCommand = new SqlCommand("SELECT precio.costo AS 'Precio' FROM precio WHERE precio.producto = @id AND precio.valido = 0 ORDER BY precio.fechaCreado DESC", db.Conn);
						db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@id", SqlDbType.Int)).Value = _id;
						db.dadap.Fill(ds, "preciou");
						return Convert.ToDouble(ds.Tables["preciou"].Rows[0].ItemArray[0]);
					}
				}
				catch (Exception ex)
				{
					throw new Exception(ex.Message);
				}
			}
		}

		public static void GetMarcasTextBox(System.Windows.Forms.TextBox textBox)
		{
			try
			{
				//Obtención de los datos.
				DataBase db = DataBase.GetInstance(); // Creo un objeto Database para adquirir los datos de la BD.
				System.Data.DataSet ds = new System.Data.DataSet(); // DataSet para almacenar los datos obtenidos.
				string consulta = "SELECT marca.descripcion FROM marca"; 
				db.dadap.SelectCommand = new System.Data.SqlClient.SqlCommand(consulta, db.Conn); // Obtengo los datos desde la BD.
				db.dadap.Fill(ds, "marcas"); // Lleno los datos obtenidos en el DataSet.
				// Llenado del TextBox
				textBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
				textBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Append;
				System.Windows.Forms.AutoCompleteStringCollection aColl = new System.Windows.Forms.AutoCompleteStringCollection();
				foreach (System.Data.DataRow dr in ds.Tables["marcas"].Rows)
				{
					aColl.Add((string)dr[0]);
				}
				textBox.AutoCompleteCustomSource = aColl;

			}
			catch (Exception)
			{

				throw;
			}


		}

		public static bool ExisteMarca(string marca)
		{
			try
			{
				DataSet ds = new DataSet();
				DataBase bd = DataBase.GetInstance();
				bd.dadap.SelectCommand = new SqlCommand("SELECT COUNT(id) AS 'CANTIDAD' FROM marca WHERE descripcion = @marca", bd.Conn);
				bd.dadap.SelectCommand.Parameters.Add(new SqlParameter("@marca", SqlDbType.VarChar)).Value = marca;
				bd.dadap.Fill(ds, "ExMarca");
				if (Convert.ToInt32(ds.Tables["ExMarca"].Rows[0].ItemArray[0]) == 0)
					return false;
				return true;
			}
			catch (Exception)
			{
				
				throw;
			}
		}

		public static void AgregarMarca(string marca)
		{
			try
			{
				DataSet ds = new DataSet();
				DataBase bd = DataBase.GetInstance();
				bd.dadap.InsertCommand = new SqlCommand("INSERT INTO marca VALUES(@marca)", bd.Conn);
				bd.dadap.InsertCommand.Parameters.Add(new SqlParameter("@marca", SqlDbType.VarChar)).Value = marca;
				bd.dadap.InsertCommand.ExecuteNonQuery();
			}
			catch (Exception)
			{

				throw;
			}
		}


		public static int GetIdProductoByIdPrecio(int idPrecio)
		{
			try
			{
				DataSet ds = new DataSet();
				DataBase db = DataBase.GetInstance();

				db.dadap.SelectCommand = new SqlCommand("SELECT producto FROM precio WHERE id = @idPrecio ", db.Conn);
				db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@idPrecio",SqlDbType.Int)).Value = idPrecio;
				db.dadap.Fill(ds,"IDProducto");
				return Convert.ToInt32(ds.Tables["IDProducto"].Rows[0].ItemArray[0]);

			}
			catch (Exception)
			{
				return 0;
				throw;
			}
		}
		#endregion

		internal static string GetMarcaById(int p)
		{
			try
			{
				DataSet ds = new DataSet();
				DataBase db = DataBase.GetInstance();

				db.dadap.SelectCommand = new SqlCommand("SELECT marca.descripcion FROM marca WHERE marca.id = @idmarca", db.Conn);
				db.dadap.SelectCommand.Parameters.Add(new SqlParameter("@idmarca", SqlDbType.Int)).Value = p;
				db.dadap.Fill(ds,"marca");

				return ds.Tables["marca"].Rows[0].ItemArray[0].ToString();
			}
			catch (Exception)
			{
				
				throw;
			}
		}
	}

}
